---
title: Nacos 集群环境搭建
---
保障系统的高可用性有两个大道至简的方向。

* 避免单点故障：在做系统架构的时候，应该假设任何服务器都应该挂掉。如果某项任务依赖单一服务资源，那么这就会成为一个单点，一旦这个服务资源挂掉就表示整个服务功能变得不可用。
* 故障机器状态恢复： 尽快将故障机器恢复到状态前的状态。对于像 Nacos 这类中心化注册中心来说，因故障而下线的机器再重新上线后，应该有能力从某个地方获取故障发生器的服务注册列表。

Nacos 是通过构建服务集群解决上述两个问题的。集群环境不仅可以有效规避单点故障问题，同时对于故障恢复场景来说，重新上线的机器也可以从集群中的其它节点同步数据信息，恢复到故障前的状态。

在实际的项目中，如果某个微服务的 Client 要连接到 Nacos 集群做服务注册，我们并不会把 Nacos 集群中的所有服务器都配置在 Client 中，否则每次 Nacos 集群增加或删除了节点，都要对 Client 做一次代码变更并重新发布。

正确且常见的做法应该是提供一个 VIP URL 给到 Client，VIP URL 是一个虚拟 IP 地址，我们可以把真实的 Nacos 服务器地址列表隐藏在虚拟 IP 后面，客户端连接虚拟 IP 即可。这样一来，即便 Nacos 集群机器数量发生了变动，也不会对客户端造成任何影响。

:::tip
常见的提供虚 IP 的技术手段很多，比如通过搭建 Nginx + LVS 或者 keepalived 技术实现高可用集群。
:::
## docker-compose 搭建单个节点
Docker Compose 部署一个 Nacos 单节点环境，并将 RDB 作为数据源，可以遵循以下步骤：
1. 编写配置文件。
```env title='配置文件'
PREFER_HOST_MODE=hostname
MODE=standalone
MYSQL_SERVICE_HOST=rm-2vcg9d4k2h3fe6w7j3o.rwlb.cn-chengdu.rds.aliyuncs.com
MYSQL_SERVICE_DB_NAME=nacos_server
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=nacos
MYSQL_SERVICE_PASSWORD=Zbb010719!
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
NACOS_AUTH_IDENTITY_KEY=2222
NACOS_AUTH_IDENTITY_VALUE=2xxx
NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789
```

2. 编写 docker-compose.yaml 文件，并编写以下内容。

```env title='docker-compose文件'
version: "3"
services:
  nacos:
    image: nacos/nacos-server
    container_name: nacos-server
    env_file:
      - ./nacos-standlone-mysql.env
    ports:
      - "8848:8848"
    volumes:
      - ./nacos-logs:/home/nacos/logs
      - ./nacos-init.d:/home/nacos/init.d
    restart: always
```

3. 启动 Nacos 服务

```shell
docker-compose up -d
```
4. 验证 Nacos 集群是否成功启动

访问 http://localhost:8848/nacos/，应该可以看到 Nacos 控制台界面。在控制台界面上，可以创建配置，管理服务等等
